# -*- coding: utf-8 -*-
PI = 3.14

# 函数定义


def add(x, y):
    return x+y


a = input("第一个数字：")
b = input("第二个数字：")
a = int(a)
b = int(b)
print(add(a, b))


# 空代码块 pass相当于空代码块
a = 0


def doNothing(a):
    if a > 0:
        print('haha')
    elif a == 0:
        pass
    else:
        pass


# 多返回值 返回的是一个tulp
def get_point(x, y):
    x += 10
    y += 10
    return x, y

print(get_point(10,20))


# 可变参数 将参数组装成一个tuple
def addAll(*numbers):
    a=0
    for n in numbers:
        a+=n
    return a
print("结果是",addAll(1,2,3,4))



# 关键字参数 **kw kw将参数组装成一个dict 可以输入任意个参数

def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)

person('bob',18,city='成都')

#直接构造dict调用
extra={'city':'beijing','gender':'男','favicate':'大保健'}
person('dave',18,city=extra['city'],gender=extra['gender'])
#简化写法
person('dave',18,**extra)



#命名关键字参数 可以限制关键字的名字 关键字参数**kw不同，命名关键字参数需要一个特殊分隔符*，*后面的参数被视为命名关键字参数
def person(name, age, *, city, job):
    print(name, age, city, job)

person('bb',13,city='东莞',job='技师')

#如果命名参数前面有可变参数 可以不写*
def person(name, age, *args, city, job):
    print(name, age,args, city, job)

person('bb',13,13,14,city='东莞',job='技师')




#参数组合 定义的顺序必须是：必选参数、默认参数、可变参数、命名关键字参数和关键字参数
def f(a, b, c=0, *args, d, **kw):
    print('a =', a, 'b =', b, 'c =',c ,'args=',args, 'd =', d, 'kw =', kw)
#d是个命名关键字参数 kw是关键字参数
args=(4,5,6)
p={"name":'dave',"age":18}
kw={"d":10,"name":'dave',"age":18}
#调用
f(1,2,3,*args,d=10,**p)
f(*args,**kw)
#可以使用(*arg,**kw)调用任意函数

